from django.conf import settings
from django.shortcuts import redirect,render
from web.forms.account_form import *
from django_redis import get_redis_connection
from utils.Baseresponse import BaseResponse
from django.http import JsonResponse
import random

def login(request):
    if request.method == 'GET':
        form = LoginForm()
        return render(request, 'login.html', {'form': form})

    # form 校验
    form = LoginForm(request.POST)
    if not form.is_valid():
        return render(request, 'login.html', {'form': form})

    # 数据库校验
    data_dict = form.cleaned_data
    role = data_dict.pop('role')

    # 密码加密，也可以在表单验证校验
    # data_dict['password'] = md5(data_dict['password'])

    if role == '1':
        user_obj = models.Administrator.objects.filter(active=1).filter(**data_dict).first()
    else:
        user_obj = models.Customer.objects.filter(active=1).filter(**data_dict).first()
    if not user_obj:
        form.add_error('username',"用户名或密码错误")
        return render(request, 'login.html', {'form': form})

    # 验证成功写入session.!!!启用中间件
    mapping = {'1':"ADMIN",'2':"CUSTOMER"}
    request.session[settings.FC_SESSION] = {'role': mapping[role],'name': user_obj.username,'id':user_obj.id}
    return redirect('home')


def sms_code(request):
    res = BaseResponse()
    form = SmsCodeForm(request.POST)
    if not form.is_valid():
        res.detail = dict(form.errors)
        return JsonResponse(res.dict)

    # redis 设置过期时间
    code = random.randint(100000,999999)
    print(code,99999999)
    conn = get_redis_connection('default')
    conn.setex('mobile_code',60,code)

    res.status = True
    return JsonResponse(res.dict)

def sms_login(request):
    if request.method == 'GET':
        form = SmsLoginForm()
        return render(request, 'sms_login.html', {'form': form})
    res = BaseResponse()
    form = SmsLoginForm(request.POST)
    if not form.is_valid():
        res.detail = dict(form.errors)
        return JsonResponse(res.dict)
    role = form.cleaned_data.pop('role')
    data_dict = form.cleaned_data
    mobile = data_dict['mobile']
    code = data_dict.pop('code')

    if role == '1':
        user_obj = models.Administrator.objects.filter(active=1).filter(**data_dict).first()
    else:
        user_obj = models.Customer.objects.filter(active=1).filter(**data_dict).first()
    mapping = {'1':"ADMIN",'2':"CUSTOMER"}
    request.session[settings.FC_SESSION] = {'role':mapping[role],'name': user_obj.username,'id':user_obj.id}
    res.status = True
    res.data = '/home/'
    return JsonResponse(res.dict)

"""
当 res.data = '/home/' 时：
location.href 会将 res.data 视为一个完整的路径（因为以斜杠 / 开头），所以会将当前的协议（http://）、主机（127.0.0.1:8000）与这个路径组合起来，形成完整的 URL http://127.0.0.1:8000/home/ 进行重定向。
当 res.data = 'home' 时：
location.href 会将 res.data 视为一个相对路径，并且是相对于当前页面的路径。由于当前页面的 URL 是 http://127.0.0.1:8000/sms/login/，所以它会将 home 附加到当前路径后面，形成 http://127.0.0.1:8000/sms/login/home 进行重定向。
如果你希望重定向到 http://127.0.0.1:8000/home/，确保 res.data 包含完整的以斜杠开头的路径 /home/。如果 res.data 只是 home，你可以在前端代码中进行处理，将其转换为完整的路径，例如：
javascript
if (res.status) {
    var targetUrl = res.data;
    if (!targetUrl.startsWith('/')) {
        targetUrl = '/' + targetUrl;
    }
    location.href = window.location.origin + targetUrl;
}
这样可以确保无论 res.data 是什么形式，都能正确地进行重定向。
"""

def home(request):
    return render(request,'home.html')

def logout(request):
    return redirect('login')